package com.itheima.d3_polymorphism;

public class Test {
    public static void main(String[] args) {
        // 目标：搞清楚多态下的类型转换问题。
        Animal a = new Dog();
        a.cry();
        // 强制类型转换: 可以解决多态下不能直接调用子类独有方法的问题。
        Dog d1 = (Dog) a;
        d1.lookDoor();

        // 强制类型转换的注意事项1：只要有继承或者实现关系的两个类就可以强制转换
        // 编译阶段不会报错（写代码），但是运行时可能出现强制类型转换异常。
       // Cat c1 = (Cat) a; // 编译不报错，运行时报错

        Cat c = new Cat();
        go(c);

    }

    public static void go(Animal a){
        System.out.println("开始。。。");
        a.cry();
        // 因此Java建议强制转换前，先判断对象的真实类型，再进行强制转换
        if(a instanceof Dog){
            Dog d2 = (Dog) a;
            d2.lookDoor();
        }else if(a instanceof Cat){
            Cat c2 = (Cat) a;
            c2.catchFish();
        }
        System.out.println("结束。。。");
    }

}
